import 'dart:ui';

extension HexColor on String {
  /// 16进制字符转Color
  /// #FFF, #FFFF, #FFFFFF, #FFFFFFFF
  /// 支持4，5，7，8，9位以"#"开头合格Hex字符串转Color
  Color get color {
    assert(RegExp(r"#([A-Fa-f\d]{3,4}){1,2}$").hasMatch(this), "颜色格式错误");
    int a, r, g, b;
    var str = substring(1).toUpperCase();
    switch (length) {
      case 4:
        a = 255;
        r = int.parse("${str.substring(0, 1)}${str.substring(0, 1)}", radix: 16) & 255;
        g = int.parse("${str.substring(1, 2)}${str.substring(1, 2)}", radix: 16) & 255;
        b = int.parse("${str.substring(2, 3)}${str.substring(2, 3)}", radix: 16) & 255;
        break;
      case 5:
        a = int.parse("${str.substring(0, 1)}${str.substring(0, 1)}", radix: 16) & 255;
        r = int.parse("${str.substring(1, 2)}${str.substring(1, 2)}", radix: 16) & 255;
        g = int.parse("${str.substring(2, 3)}${str.substring(2, 3)}", radix: 16) & 255;
        b = int.parse("${str.substring(3, 4)}${str.substring(3, 4)}", radix: 16) & 255;
        break;
      case 7:
        var bigint = int.parse(str, radix: 16);
        a = 255;
        r = (bigint >> 16) & 255;
        g = (bigint >> 8) & 255;
        b = bigint & 255;
        break;
      default:
        var bigint = int.parse(str, radix: 16);
        a = (bigint >> 24) & 255;
        r = (bigint >> 16) & 255;
        g = (bigint >> 8) & 255;
        b = bigint & 255;
        break;
    }
    return Color.fromARGB(a, r, g, b);
  }
}